---
title: "Developer Doc: Auto-Creation of Sales Order from Service Orders"
space: "Icd tz"
url: "https://support.aakvatech.com/ICD TZ/developer-doc-auto-creation-of-sales-order-from-service-orders"
updated: "2026-07-22"
---

## Auto-Creation of Sales Order from Service Orders

### **Purpose**
This method enables automated Sales Order generation from one or more submitted Service Orders in a container logistics workflow using the `make_sales_order()` function.

---

### **Key Functions**

#### **`create_sales_order(data)`**
- Parses JSON input (`m_bl_no`)
- Ensures all Service Orders are submitted
- Calls `make_sales_order()` if valid

#### **`make_sales_order(doc_type, doc_name, m_bl_no, manifest)`**
- Aggregates Service Orders by BL No & Manifest
- Collects customer, consignee, and charge details
- Creates Sales Order with computed line items

#### **`get_container_days_to_be_billed()`**
- Determines billable storage days from container based on destination and ICD settings
- Differentiates between single and double chargeable days

#### **`get_items()`**
- Maps services to storage items
- Calculates qty as billable days
- Skips invoiced days
- Generates item list for Sales Order

---

### **Customization Points**
- `ICD TZ Settings`: Define `storage_item_single_20ft`, `storage_item_double_40ft`, charge ranges
- `Container.container_dates`: Must include `is_billable`, `sales_invoice`, etc.

---

### **DocTypes Used**
- **Service Order**
- **Sales Order**
- **Container**
- **ICD TZ Settings**

---

### **Notes**
- Ensure `qty > 0` before inserting Sales Order items.
- Update link-back for traceability to the Service Order.
- Use `@frappe.whitelist()` to allow function triggering via JS or button.
